<?php

namespace app\admin\model\sum\user;

use app\admin\model\sum\Common;
use app\admin\model\sum\user\User as UserModel;
//use app\admin\model\sum\order\Order as OrderModel;

class Coupon extends Common
{
    protected $name = 'sum_user_coupon';

    protected $type = [
        'use_time' => 'timestamp',
        'send_time' => 'timestamp'
    ];

    // 追加属性
    protected $append = [
        'status',
        'status_text',
    ];


    public function statusList()
    {
        return [
            'used' => '已使用',
            'sent' => '已赠送',
            'can_use' => '可使用',
            'expired' => '已过期',
        ];
    }

    // 可以使用
    public function scopeCanUse($query)
    {
        return $query->whereNull('use_time')->whereNull('send_time')->where('use_end_time', '>=', time());
    }

    // 已使用
    public function scopeUsed($query)
    {
        return $query->whereNotNull('use_time');
    }
    // 已赠送
    public function scopeSent($query)
    {
        return $query->whereNotNull('send_time');
    }

    // 已使用或已赠送
    public function scopeUsedorsent($query)
    {
        return $query->where(function($query) {
            $query->whereNotNull('use_time')
                ->whereOr(function($query) {
                    $query->whereNotNull('send_time');
                });
        });
    }


    // 未使用也未赠送，但已过期
    public function scopeExpired($query)
    {
        return $query->whereNull('use_time')->whereNull('send_time')->where('use_end_time', '<', time());
    }

    // 我的优惠券使用状态
    public function getStatusAttr($value, $data)
    {
        if ($data['use_time']) {
            $status = 'used';
        }elseif($data['send_time']){
            $status = 'sent';
        }elseif($this->use_end_time <= date('Y-m-d H:i:s')){
            $status = 'expired';
        }else{
            $status = 'can_use';
        }
        return $status;
    }

    public function getStatusTextAttr($value, $data)
    {
        $value = $value ?: ($this->status ?? '');
        $list = $this->statusList();
        return isset($list[$value]) ? $list[$value] : '';
    }
    public function getUseEndTimeAttr($value, $data)
    {
        $use_end_time = $value ? date('Y-m-d H:i:s', $value) : null;
        return $use_end_time;
    }
    public function user()
    {
        return $this->belongsTo(UserModel::class, 'user_id');
    }

//    public function order()
//    {
//        return $this->belongsTo(OrderModel::class, 'use_order_id');
//    }
}
